package model;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import enumtype.OrdemServicoBaixada;
import enumtype.StatusOrdemServico;
@Entity
@NamedQueries( {
	@NamedQuery(name="findOSByTel", query = "select o from OrdemServico o where o.cliente.telefone = ?1 and o.cliente.ddd = ?2"),
	@NamedQuery(name="findOSParaBaixar", query = "select o from OrdemServico o where o.baixada = enumtype.OrdemServicoBaixada.NAO"),
	@NamedQuery(name="findAllOSs", query = "select o from OrdemServico o"),
	@NamedQuery(name="findOSByNumOS", query = "select o from OrdemServico o where o.id = ?1")
})

@Table(name = "ORDEM_SERVICO", schema = "simos") 
public class OrdemServico implements Serializable{

	private static final long serialVersionUID = -3102430223820673432L;
	
	@TableGenerator(
			name="generatorOS",
			pkColumnValue="SEQ_OS",
			allocationSize=1)
	@Id
	@Column(name = "ORSE_ID")
	@GeneratedValue(strategy=GenerationType.TABLE, generator = "generatorOS")
	private Integer id;
	
	@Column(name = "ORSE_DT_DATA_ABERTURA")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAbertura;
	
	 
	@Column(name = "ORSE_TX_DESCRICAO_PROBLEMA")
	private String descricaoProblema;
	
	@Column(name = "ORSE_TX_DESCRICAO_SERVICO")
	private String descricaoServico;
	
	@Column(name = "ORSE_DT_DH_CONCLUSAO")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataHoraConclusao;
	
	
	@Enumerated(EnumType.STRING)
	@Column(length = 30)
	private StatusOrdemServico status;
	
	
	@Enumerated(EnumType.STRING)
	@Column(name = "ORSE_IN_BAIXADA", length = 3)
	private OrdemServicoBaixada baixada;
	
	

	@ManyToMany(mappedBy = "colOrdemServico")
	private Collection <Tecnico> colTecnico;
	
	 @OneToMany(mappedBy = "os")
	private Collection <Visita> colVisita;
	 @ManyToOne
	 @JoinColumn(name = "CLIE_ID", referencedColumnName = "CLIE_ID")
	private Cliente cliente;
	 
	 @Column(name = "ORSE_SG_TIPO_SERVICO")
	 private Character tipoServico;

	 public OrdemServicoBaixada getBaixada() {
			return baixada;
	}

	public void setBaixada(OrdemServicoBaixada baixada) {
			this.baixada = baixada;
	}
	 
	public Date getDataAbertura() {
		return dataAbertura;
	}

	public void setDataAbertura(Date dataAbertura) {
		this.dataAbertura = dataAbertura;
	}

	public String getDescricaoProblema() {
		return descricaoProblema;
	}

	public void setDescricaoProblema(String descricaoProblema) {
		this.descricaoProblema = descricaoProblema;
	}

	public Date getDataHoraConclusao() {
		return dataHoraConclusao;
	}

	public void setDataHoraConclusao(Date dataHoraConclusao) {
		this.dataHoraConclusao = dataHoraConclusao;
	}

	public Collection<Tecnico> getColTecnico() {
		return colTecnico;
	}

	public void setColTecnico(Collection<Tecnico> colTecnico) {
		this.colTecnico = colTecnico;
	}

	public Collection<Visita> getColVisita() {
		return colVisita;
	}

	public void setColVisita(Collection<Visita> colVisita) {
		this.colVisita = colVisita;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cli) {
		this.cliente = cli;
	}

	public Integer getId() {
		return id;
	}

	public Character getTipoServico() {
		return tipoServico;
	}

	public void setTipoServico(Character tipoServico) {
		this.tipoServico = tipoServico;
	}

	public StatusOrdemServico getStatus() {
		return status;
	}

	public void setStatus(StatusOrdemServico status) {
		this.status = status;
	}

	public String getDescricaoServico() {
		return descricaoServico;
	}

	public void setDescricaoServico(String descricaoServico) {
		this.descricaoServico = descricaoServico;
	}
	 
		 
}
 
